# Copyright 2024 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

if (NOT COMPILER_GCC)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=0")
    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=0")
endif()

### Libraries

fuzztest_cc_library(
  NAME
    bazel
  HDRS
    "bazel.h"
  SRCS
    "bazel.cc"
  DEPS
    fuzztest::common_logging
    absl::status
    absl::strings
    absl::time
)

fuzztest_cc_library(
  NAME
    blob_file
  HDRS
    "blob_file.h"
  SRCS
    "blob_file.cc"
  DEFINES
    # Riegeli doesn't yet support CMake builds:
    # https://github.com/google/riegeli/issues/16
    CENTIPEDE_DISABLE_RIEGELI
  DEPS
    fuzztest::defs
    fuzztest::hash
    fuzztest::common_logging
    fuzztest::remote_file
    fuzztest::status_macros
    absl::core_headers
    absl::nullability
    absl::status
    absl::statusor
    absl::str_format
    absl::string_view
    absl::time
)

fuzztest_cc_library(
  NAME
    crashing_input_filename
  HDRS
    "crashing_input_filename.h"
  SRCS
    "crashing_input_filename.cc"
  DEPS
    absl::status
    absl::statusor
    absl::strings
    fuzztest::io
)

fuzztest_cc_library(
  NAME
    defs
  HDRS
    "defs.h"
  DEPS
    absl::span
)

fuzztest_cc_library(
  NAME
    hash
  HDRS
    "hash.h"
  SRCS
    "hash.cc"
  DEPS
    fuzztest::defs
    fuzztest::sha1
)

fuzztest_cc_library(
  NAME
    common_logging
  HDRS
    "logging.h"
  DEPS
    absl::absl_check
    absl::absl_log
)

fuzztest_cc_library(
  NAME
    remote_file
  HDRS
    "remote_file.h"
  SRCS
    "remote_file.cc"
    "remote_file_oss.cc"
  DEFINES
    # Riegeli doesn't yet support CMake builds:
    # https://github.com/google/riegeli/issues/16
    CENTIPEDE_DISABLE_RIEGELI
  DEPS
    fuzztest::defs
    fuzztest::common_logging
    fuzztest::status_macros
    absl::nullability
    absl::status
    absl::statusor
    absl::strings
)

fuzztest_cc_library(
  NAME
    sha1
  HDRS
    "sha1.h"
  SRCS
    "sha1.cc"
  DEPS
    absl::nullability
)

fuzztest_cc_library(
  NAME
    status_macros
  HDRS
    "status_macros.h"
  DEPS
    fuzztest::common_logging
    absl::core_headers
)

fuzztest_cc_library(
  NAME
    test_util
  HDRS
    "test_util.h"
  SRCS
    "test_util.cc"
  DEPS
    fuzztest::common_logging
    fuzztest::blob_file
    fuzztest::defs
    absl::strings
    absl::str_format
    GTest::gtest
  TESTONLY
)

fuzztest_cc_library(
  NAME
    temp_dir
  HDRS
    "temp_dir.h"
  SRCS
    "temp_dir.cc"
  DEPS
    fuzztest::common_logging
    absl::string_view
    absl::strings
)

### Tests

fuzztest_cc_test(
  NAME
    blob_file_test
  SRCS
    "blob_file_test.cc"
  DEPS
    fuzztest::blob_file
    fuzztest::defs
    fuzztest::test_util
    absl::status
    GTest::gmock_main
)

fuzztest_cc_test(
  NAME
    crashing_input_filename_test
  SRCS
    "crashing_input_filename_test.cc"
  DEPS
    fuzztest::crashing_input_filename
    GTest::gmock_main
)

fuzztest_cc_test(
  NAME
    hash_test
  SRCS
    "hash_test.cc"
  DEPS
    fuzztest::hash
    GTest::gmock_main
)

fuzztest_cc_test(
  NAME
    remote_file_test
  SRCS
    "remote_file_test.cc"
  DEPS
    fuzztest::common_logging
    fuzztest::remote_file
    fuzztest::test_util
    absl::check
    absl::status
    absl::time
    GTest::gmock_main
)
